www.gusucode.com > vc++ 远程控制示例源程序-源码程序 > vc++ 远程控制示例源程序-源码程序\code\PeerYouC\ScreenCtrl.cpp

    // ScreenCtrl.cpp : implementation file
// Download by http://www.NewXing.com

#include "stdafx.h"
#include "peeryouc.h"
#include "ScreenCtrl.h"
#include "screenview.h"
#include "mainfrm.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CScreenCtrl

IMPLEMENT_DYNCREATE(CScreenCtrl, CFormView)

CScreenCtrl::CScreenCtrl()
	: CFormView(CScreenCtrl::IDD)
{
	//{{AFX_DATA_INIT(CScreenCtrl)
	m_ALT = FALSE;
	m_CTRL = FALSE;
	m_SHIT = FALSE;
	m_WIN = FALSE;
	m_start=false;
	//}}AFX_DATA_INIT
}

CScreenCtrl::~CScreenCtrl()
{
}

void CScreenCtrl::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CScreenCtrl)
	DDX_Control(pDX, IDC_STARTSTOP, m_startstop);
	DDX_Check(pDX, IDC_ALT, m_ALT);
	DDX_Check(pDX, IDC_CTRL, m_CTRL);
	DDX_Check(pDX, IDC_SHIT, m_SHIT);
	DDX_Check(pDX, IDC_WIN, m_WIN);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CScreenCtrl, CFormView)
	//{{AFX_MSG_MAP(CScreenCtrl)
	ON_BN_CLICKED(IDC_SCREEN, OnScreen)
	ON_BN_CLICKED(IDC_CTRL, OnCtrl)
	ON_BN_CLICKED(IDC_ALT, OnAlt)
	ON_BN_CLICKED(IDC_SHIT, OnShit)
	ON_BN_CLICKED(IDC_WIN, OnWin)
	ON_BN_CLICKED(IDC_STARTSTOP, OnStartstop)
	ON_BN_CLICKED(IDC_SEND, OnSend)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CScreenCtrl diagnostics

#ifdef _DEBUG
void CScreenCtrl::AssertValid() const
{
	CFormView::AssertValid();
}

void CScreenCtrl::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CScreenCtrl message handlers

void CScreenCtrl::OnScreen() 
{
	// TODO: Add your control notification handler code here
	CMainFrame *pMain=(CMainFrame*)AfxGetApp()->GetMainWnd();
	::SendMessage(pMain->GetSafeHwnd(),FULLSCREEN,0,0);
}

void CScreenCtrl::OnCtrl() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
}

void CScreenCtrl::OnAlt() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
}

void CScreenCtrl::OnShit() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
}

void CScreenCtrl::OnWin() 
{
	// TODO: Add your control notification handler code here
	UpdateData();
}

void CScreenCtrl::OnStartstop() 
{
	// TODO: Add your control notification handler code here
	m_start=!m_start;
	CPeerSplitterWnd* splitter=(CPeerSplitterWnd*)GetParent();
	CScreenView* sctrl=(CScreenView*)splitter->GetPane(1,0);
	sctrl->SetFocus();
	sctrl->ifstart=m_start;
	m_start?m_startstop.SetWindowText("停止捕屏"):m_startstop.SetWindowText("开始捕屏");
	if(m_start)
	{
		if(!(sctrl->src=new char[3*1024*1024]))
			return;
		if(!(sctrl->des=new char[3*1024*1024]))
			return;
		sctrl->hEvent=WSACreateEvent();
		if(sctrl->hEvent==WSA_INVALID_EVENT)
		{
			return;
		}
		if(!PeerCreateSocket(&sctrl->s,PEER_STREAM))
		{
			WSACloseEvent(sctrl->hEvent);
			return;
		}
		if(!PeerConnectSocket(sctrl->s,ADDRESS,7788))
		{
			WSACloseEvent(sctrl->hEvent);
			closesocket(sctrl->s);
			return;
		}
		sctrl->hEvent1=WSACreateEvent();
		if(sctrl->hEvent1==WSA_INVALID_EVENT)
		{
			return;
		}
		if(!PeerCreateSocket(&sctrl->s1,PEER_STREAM))
		{
			WSACloseEvent(sctrl->hEvent1);
			return;
		}
		if(!PeerConnectSocket(sctrl->s1,ADDRESS,7788))
		{
			WSACloseEvent(sctrl->hEvent1);
			closesocket(sctrl->s1);
			return;
		}
		sctrl->com.CommandID=PEER_KEYMOUSE;
		if(!PeerSendDataS(sctrl->s,(char*)&sctrl->com,sizeof(sctrl->com),&sctrl->retLen,sctrl->hEvent))
		{
			WSACloseEvent(sctrl->hEvent);
			closesocket(sctrl->s);
			return;
		}
		sctrl->com1.CommandID=PEER_SCREEN_GET;
		if(!PeerSendDataS(sctrl->s1,(char*)&sctrl->com1,sizeof(sctrl->com1),&sctrl->retLen1,sctrl->hEvent1))
		{
			WSACloseEvent(sctrl->hEvent1);
			closesocket(sctrl->s1);
			return;
		}
		sctrl->SetTimer( 1,1000,NULL);
		Message("远程屏幕操作开始!","成功");
	}
	else
	{
		sctrl->KillTimer(1);
		if(sctrl->src)
			delete []sctrl->src;
		if(sctrl->des)
			delete []sctrl->des;
		sctrl->src=0;
		sctrl->des=0;
		closesocket(sctrl->s);
		WSACloseEvent(sctrl->hEvent);
		closesocket(sctrl->s1);
		WSACloseEvent(sctrl->hEvent1);
		Message("远程屏幕操作结束!","成功");
	}
}

void CScreenCtrl::OnSend() 
{
	// TODO: Add your control notification handler code here
	if(m_start)
	{
		KEYMOUSE keymouse;
		CPeerSplitterWnd* splitter=(CPeerSplitterWnd*)GetParent();
		CScreenView* sctrl=(CScreenView*)splitter->GetPane(1,0);
		if(m_ALT)
			keymouse.style=PEER_KEY_DOWN;
		else
			keymouse.style=PEER_KEY_UP;
		keymouse.nkey=VK_MENU;
		PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen,
						  sctrl->hEvent);
		if(m_CTRL)
			keymouse.style=PEER_KEY_DOWN;
		else
			keymouse.style=PEER_KEY_UP;
		keymouse.nkey=VK_CONTROL;
		PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen,
						  sctrl->hEvent);
		if(m_SHIT)
			keymouse.style=PEER_KEY_DOWN;
		else
			keymouse.style=PEER_KEY_UP;
		keymouse.nkey=VK_SHIFT;
		PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen,
						  sctrl->hEvent);
		if(m_WIN)
			keymouse.style=PEER_KEY_DOWN;
		else
			keymouse.style=PEER_KEY_UP;
		keymouse.nkey=VK_LWIN;
		PeerSendDataS(sctrl->s,(char*)&keymouse,sizeof(keymouse),&sctrl->retLen,
						  sctrl->hEvent);
	}
	
}